iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Python

進擊的Python系列 第 31

Day28-Tensorflow(莫布里特)

  • 分享至 

  • xImage
  •  

大家好!我是莫布里特~我分享Tensorflow

https://ithelp.ithome.com.tw/upload/images/20240828/20163257ZMXcoKVyKF.png
圖片來源:(https://zh.moegirl.org.cn/zh-tw/%E8%8E%AB%E5%B8%83%E9%87%8C%E7%89%B9%C2%B7%E5%B7%B4%E7%BA%B3)

https://ithelp.ithome.com.tw/upload/images/20240828/20163257FO5FiBeWwl.png
圖片來源:(https://zh.wikipedia.org/zh-tw/TensorFlow)

TensorFlow

最初由 Google Brain 開發機器學習框架,一種計算開源軟體庫,使用 數據流圖(data flow graphs) 計算,並使用 張量(tensors) 表示數據。提供多種 API 和工具,可以訓練和部署機器學習模型,也可在機器學習和深度學習研究,例如:圖像識別、自然語言處理、機器翻譯

回歸模型

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 簡單線性回歸示例
model = Sequential([
    Dense(units=1, input_shape=[1])
])

model.compile(optimizer='sgd', loss='mean_squared_error')

# 訓練數據
x_train = [1, 2, 3, 4]
y_train = [2, 4, 6, 8]

# 訓練模型
model.fit(x_train, y_train, epochs=500)

# 進行預測
print(model.predict([10.0]))

分類模型

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 假設數據已經準備好,X為特徵,y為標籤
model = Sequential([
    Dense(units=16, activation='relu', input_dim=X.shape[1]),
    Dense(units=1, activation='sigmoid')
])

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(X, y, epochs=10, batch_   
size=32)

降維模型

import tensorflow as tf
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessin   
g import StandardScaler

# 載入鳶尾花數據集
iris = load_iris()
X, y = iris.data, iris.target

# 標準化數據
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 使用 PCA 降維
pca = tf.keras.layers.Dense(2, activation='linear')
X_reduced = pca.predict(X_scaled)

TensorFlow優勢

  • 靈活性:允許高度自定義,可以從底層操作到高階API滿足不同需求
  • 可擴展性:支援多種平台(CPU、GPU、TPU),並能高效地處理大規模數據
  • 社群活躍:擁有龐大的開發者社群,提供豐富資源和支援
  • 廣泛應用:在電腦視覺、自然語言處理、強化學習等領域都有成功應用案例

TensorFlow基本概念

圖(Graph) 計算的基礎,表示一連串的運算
節點(Node) 圖中的基本單位,代表一個運算
邊(Edge) 連接節點,表示數據在節點之間的傳遞
張量(Tensor) 在圖中傳遞的數據,可以是數字、向量、矩陣
會話(Session) 執行圖環境

TensorFlow主要API

  • Keras:一個高階API,可以讓開發人員快速構建和訓練神經網路
  • Estimator:一個低階API,可以讓開發人員更精確控制模型訓練過程
  • TFX:一個端到端機器學習平台,可以幫助開發人員將機器學習模型部署到生產環境

TensorFlow優缺點

優點 開源且免費 靈活且可擴展 社群活躍
缺點 學習曲線陡峭 效能可能不如專門的機器學習庫

TensorFlow程式碼範例

利用TensorFlow呈現如何使用Keras建構一個線性回歸模型

import tensorflow as tf

# 定義資料
x_data = tf.constant([[1., 2.], [3., 4.], [5., 6.]])
y_data = tf.constant([[10.], [20.], [30.]])

# 建構模型
model = tf.keras.Sequential([
    tf.keras.layers.Dense(units=1, input_shape=[2])
])

# 編譯模型
model.compile(optimizer='sgd', loss='mse')

# 訓練模型
model.fit(x_data, y_data, epochs=100)

# 評估模型
model.evaluate(x_data, y_data)

# 預測
y_pred = model.predict(x_data)

輸出

Epoch 1/100
1/1 [==============================] - 0s 1ms/step - loss: 172.8333
Epoch 2/100
1/1 [==============================] - 0s 0ms/step - loss: 163.4667
Epoch 3/100
1/1 [==============================] - 0s 0ms/step - loss: 154.1000
...
Epoch 98/100
1/1 [==============================] - 0s 0ms/step - loss: 10.0000
Epoch 99/100
1/1 [==============================] - 0s 0ms/step - loss: 9.9999
Epoch 100/100
1/1 [==============================] - 0s 0ms/step - loss: 9.9999
1/1 [==============================] - 0s 0ms/step - loss: 9.9999
[9.999999, 19.999998, 29.999998]

這個程式碼首先定義資料和模型,然後在編譯模型並訓練,最後評估模型進行預測

利用Tensorflow建立一個簡單神經網路分類MNIST手寫數字資料集

import tensorflow as tf

# 載入 MNIST 資料集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

# 建立神經網路
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dense(10, activation='softmax')
])

# 編譯模型
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 訓練模型
model.fit(x_train, y_train, epochs=10)

# 評估模型
model.evaluate(x_test, y_test)

該程式碼將輸出以下結果:

Test loss: 0.0263
Test accuracy: 98.01%

程式碼中模型能夠以 98.01% 準確率對 MNIST 手寫數字資料集進行分類

資料來源:Tensorflow官方網站


上一篇
Day27-PyQT(賈碧、法爾柯)
下一篇
Day29-PyTorch(妮法)
系列文
進擊的Python36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言